perm filename ALPRIN.SAI[HAL,HE]6 blob
sn#238683 filedate 1976-09-21 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 IFCR ¬DECLARATION(EXTENDED_COMPILATION) THENC
C00004 00003 ! ALPRIN
C00016 00004 ! pvdo & pvldo
C00020 ENDMK
C⊗;
IFCR ¬DECLARATION(EXTENDED_COMPILATION) THENC
ENTRY;
BEGIN "ALPRIN"
IFCR ¬DECLARATION(CREFFING) THENC DEFINE CREFFING="FALSE"; ENDC
IFCR ¬ CREFFING THENC
REQUIRE "HALREQ.HDR[HAL,HE]" SOURCE_FILE;
ENDC
REDEFINE $$PRGID "[]" = ["ALPRIN"];
IFCR CREFFING THENC REQUIRE $$PRGID MESSAGE; ENDC
ENDC
INTERNAL INTEGER PSPCIX;INITIALIZE(PSPCIX←0);
INTERNAL SIMPLE PROCEDURE PRCRLF;
PRINT(CRLF,(" "
&" ")[1 FOR PSPCIX]);
INTERNAL SIMPLE STRING PROCEDURE CVRAD(REAL W);
RETURN(CVF(W/180)&"*π");
INTERNAL SIMPLE STRING PROCEDURE CVDEG(REAL W);
RETURN(CVF(W)&"*DEG");
INTERNAL SIMPLE STRING PROCEDURE CVGX(REAL R);
RETURN(TBLKSUPPRESS(CVG(R)));
STRING PROCEDURE LBLID(RPTR(LBLVAR) LBL);
RETURN(IF LBL=NULL_RECORD THEN "<nameless>" ELSE
ITMNAM(LBLVAR:NAME[LBL]));
! ALPRIN;
INTERNAL RECURSIVE PROCEDURE ALPRIN(RANY S);
BEGIN "ALPRIN"
LABEL REPRINT,XIT,HALPR2,HALPR3;
INTEGER ST;
RCELL C;
RECURSIVE PROCEDURE HPFIN(RCELL C);
BEGIN
PSPCIX←PSPCIX+1;
WHILE C≠NULL_RECORD DO ALPRIN(LLOP(C));
PRCRLF;
PSPCIX←PSPCIX-1;
END;
REPRINT:
ST←RECTYPE(S);
IF ST=LOC(SVAL) THEN
PRINT(SVAL:VAL[S])
ELSE IF ST=LOC(V3ECT) THEN
BEGIN
BOOLEAN PROCEDURE VPRINT(RPTR(V3ECT) V,NV;STRING ID);
BEGIN
RANY SS; ! because of SAIL dryrot;
SS←S;
IF V3DIST(SS,V)=0 THEN PRINT(" "&ID)
ELSE IF V3DIST(SS,NV)=0 THEN PRINT("-"&ID)
ELSE RETURN(FALSE);
RETURN(TRUE);
END;
IF ¬VPRINT(NILVECT,NILVECT,"NILVECT") ∧
¬VPRINT(XHAT,NEGXHAT,"XHAT") ∧
¬VPRINT(YHAT,NEGYHAT,"YHAT") ∧
¬VPRINT(ZHAT,NEGZHAT,"ZHAT") THEN
PRINT(" VECTOR(", CVGX(V3ECT:X[S]),",",
CVGX(V3ECT:Y[S]),",",CVGX(V3ECT:Z[S]),")" );
END
ELSE IF ST=LOC(ROTN) THEN
BEGIN
IF S=NILROTN THEN
PRINT(" NILROTN")
ELSE
BEGIN
PRINT(" ROTN( ");
ALPRIN(ROTN:AXIS[S]);
PRINT(",",CVDEG(ROTN:MAGN[S]),")");
END;
END
ELSE IF ST=LOC(TRANS) THEN
BEGIN ! Modified by RF;
IF S=NILTRANS THEN
PRINT(" NILTRANS")
ELSE
BEGIN¬
PRINT(" TRANS(");
ALPRIN(TRANS:R[S]);
PRINT(",");
ALPRIN(TRANS:P[S]);
PRINT(")");
END;
END
ELSE IF ST=LOC(FRAME) THEN
BEGIN ! Modified by RF;
IF S=STATION THEN
PRINT(" STATION")
ELSE BEGIN
PRINT(" FRAME(");
ALPRIN(TRANS:R[FRAME:VAL[S]]);
PRINT(",");
ALPRIN(TRANS:P[FRAME:VAL[S]]);
PRINT(")");
END;
END
ELSE IF ST=LOC(VARIABLE) THEN
BEGIN
PRINT(" ",VARIABLE:NAME[S]);
END
ELSE IF ST=LOC(STCONST) THEN
BEGIN
PRINT(" ",DATUM(STCONST:VAL[S]));
END
ELSE IF ST=LOC(EXPRN) THEN
BEGIN
PRINT("(",OP_MNE[EXPRN:OP[S]]);
C←EXPRN:ARGS[S];
WHILE C≠NULL_RECORD DO ALPRIN(LLOP(C));
PRINT(")");
END
ELSE IF ST=LOC(VNODE) THEN
BEGIN
PRINT("[INV=",VNODE:INVMARK[S],",VAL=");
ALPRIN(VNODE:NOMVAL[S]);
PRINT("]");
END
ELSE IF ST=LOC(CALCULATOR) THEN
BEGIN
PRINT("( calc ",LBLID(CALCULATOR:LBL[S]),": ");
ALPRIN(CALCULATOR:FORM[S]);
PRINT(")");
END
ELSE IF ST=LOC(CHANGER) THEN
BEGIN
PRINT("(changer ",LBLID(CHANGER:LBL[S]),": ");
ALPRIN(CHANGER:CODE[S]);
PRINT(")");
END
ELSE IF ST=LOC(STMNT) THEN
BEGIN
ALPRIN(STMNT:SEMANTICS[S]);
PRINT(" [IW=",STMNT:IW[S],",OW=",STMNT:OW[S],"]");
END
ELSE IF ST=LOC(AFACT) THEN
BEGIN
PRINT("(");
ALPRIN(AFACT:LEFT[S]);
PRINT(" ","<≤=≥>"[AFACT:RELN[S]+3 FOR 1]);
ALPRIN(AFACT:RIGHT[S]);
PRINT(")");
END
ELSE IF ST=LOC(SFACT) THEN
BEGIN
PRINT(" FACT ");
S←SFACT:PATT[S];
GO TO REPRINT;
END
ELSE IF ST=LOC(CELL) THEN
BEGIN
PRINT("(");
WHILE S≠NULL_RECORD DO
BEGIN
ALPRIN(CELL:CAR[S]);
S←CELL:CDR[S];
END;
PRINT(" )");
END
ELSE IF ST=0 THEN
PRINT(" NULL_RECORD ")
ELSE IF ST=LOC(CMON) THEN
BEGIN
! Recoded by RF;
PRINT(" (ON ");
ALPRIN(CMON:CONDITION[S]);
PRINT(" DO ");
ALPRIN(CMON:CONCLUSION[S]);
PRINT(" )");
END
ELSE IF ST = LOC(EVDO) THEN
BEGIN ! Added by RF;
PRCRLF;
IF EVDO:OP[S] = 0
THEN PRINT("(SIGNAL ")
ELSE PRINT("(WAIT ");
ALPRIN(EVDO:VAR[S]);
PRINT(")");
END
ELSE
BEGIN
GO TO HALPR2;
! this admittedly ugly goto statement is here
because otherwise you have to use a bigger
parse stack in compiling this program, which
is a real pain. ;
END;
GO TO XIT; ! see the remark immediately above;
HALPR2: BEGIN
PRCRLF;
PRINT("(",CVRTS(ST));
IF ST=LOC(BLOCK)∨ST=LOC(COBLOCK) THEN
BEGIN
IF ST=LOC(BLOCK)
THEN BEGIN ! Modified by RF;
C ← BLOCK:VARS[S];
HPFIN(C);
C ← BLOCK:CODE[S];
END
ELSE IF ST=LOC(COBLOCK) THEN
C←COBLOCK:CODE[S];
HPFIN(C);
END
ELSE IF ST=LOC(PROG) THEN
BEGIN
ALPRIN(PROG:CODE[S]);
END
ELSE IF ST=LOC(ASSIGNMENT) THEN
BEGIN
ALPRIN(ASSIGNMENT:VAR[S]);
PRINT(" ");
ALPRIN(ASSIGNMENT:VAL[S]);
END
ELSE IF ST=LOC(GASSIGN) THEN
BEGIN
ALPRIN(GASSIGN:VAR[S]);
PRINT("=≠<"[GASSIGN:OP[S] FOR 1]);
ALPRIN(GASSIGN:CLC[S]);
END
ELSE IF ST=LOC(ASSERT)∨ST=LOC(DENY) THEN
BEGIN
ALPRIN(ASSERT:FACT[S]);
PRINT(" IN ",ASSERT:WLD[S]);
END
ELSE IF ST=LOC(MOVE$) THEN
BEGIN
ALPRIN(MOVE$:WHAT[S]);
PRINT(" TO ");
ALPRIN(MOVE$:DEST[S]);
IF MOVE$:CLAUSES[S]≠NULL_RECORD THEN
BEGIN
PSPCIX←PSPCIX+1;
HPFIN(MOVE$:CLAUSES[S]);
PSPCIX←PSPCIX-1;
END;
END
ELSE IF ST=LOC(CENTER) THEN
BEGIN
ALPRIN(CENTER:CF[S]);
IF CENTER:CLAUSES[S]≠NULL_RECORD THEN
BEGIN
PSPCIX←PSPCIX+1;
HPFIN(CENTER:CLAUSES[S]);
PSPCIX←PSPCIX-1;
END;
END
ELSE IF ST=LOC(PVL) THEN
ALPRIN(PVL:VL[S])
ELSE IF ST=LOC(IFF) THEN
BEGIN
ALPRIN(IFF:COND[S]);
PSPCIX←PSPCIX+1;
ALPRIN(IFF:THN[S]);
ALPRIN(IFF:ELS[S]);
PRCRLF;
PSPCIX←PSPCIX-1;
END
ELSE IF ST = LOC(WHIL) THEN
BEGIN
ALPRIN(WHIL:COND[S]);
PSPCIX←PSPCIX+1;
PRCRLF;
ALPRIN(WHIL:BODY[S]);
PSPCIX←PSPCIX-1;
END
ELSE IF ST = LOC(VIA) THEN
BEGIN "via"
ALPRIN(VIA:PLACE[S]);
IF VIA:VELOC[S] ≠ RNULL THEN ALPRIN(VIA:VELOC[S]);
IF VIA:TIME[S] ≠ RNULL THEN ALPRIN(VIA:TIME[S]);
IF VIA:CODE[S] ≠ RNULL THEN ALPRIN(VIA:CODE[S]);
END "via"
ELSE IF ST = LOC(DURATION) THEN
BEGIN "duration"
PRINT(CASE DURATION:TIME_RELN[S] OF
(" ? "," > "," < "," = "));
ALPRIN(DURATION:TIME[S]);
END "duration"
ELSE IF ST = LOC(VELOCITY) THEN
ALPRIN(VELOCITY:VELOC[S])
ELSE GOTO HALPR3;
PRINT(")");
GOTO XIT;
HALPR3: IF ST = LOC(OPENING) THEN
ALPRIN(OPENING:VAL[S])
ELSE IF ST = LOC(ARRIVAL) THEN
ALPRIN(ARRIVAL:THRU[S])
ELSE IF ST = LOC(DEPARTURE) THEN
ALPRIN(DEPARTURE:THRU[S])
ELSE IF ST = LOC(ABORT) THEN
ALPRIN(ABORT:VAL[S])
EHSE IF ST = LOC(STOP) THEN
ALPRIN(STOP:CF[S])
ELSE IF ST = LOC(PAUSE) THEN
ALPRIN(PAUSE:VAL[S])
ELSE IF ST = LOC(PRNT) THEN
ALPRIN(PRNT:VAL[S]$~∀∩∪∃→'
~(∩∩∪¬∃∂∪≤~(∩∩∪%∃π!%≤!&Rv~(∩∩∪9λv~∀$∪!%∪9(PDRλRv~∀$∪≥λl~∃1∪Pt∪%Q+%≤~(∪≥λEβ→!I∪≤Dv4∀~∃!I∨π U%
A∪9∪!
&l~∀∪¬∃∂∪≤~(∪∪≥)∃∂$A!!_v~(∪⊃!→⎇→∨εQ¬→!%∪8Rv~∀%')%A~Q→∨Q
%β5
RY⊃A_Rv~(∪')I!~Q→=εQ)%¬≥&RY!!_Rv4∀∪'Q%!~Q1∨εQ%=)≤RY!!_Rv4∀∪'Q%!~Q1∨εQ'Q≠≥(R1⊃!_Rl~∀∪'∃)%!~!→∨εQ →∨π⊗$Y⊃!_$v~∀∪M)%!4Q→∨ε!-β%∪¬¬→
R1⊃!_Rl~∀∪'∃)%!~!→∨εQ
⊃β≥∂∃$RY⊃A_Rv~(∪')I!~Q→=εQπβ1π+→βQ∨$RY!!_Rv4∀∪'Q%!~Q1∨εQa!%≤R1⊃!_Rl~∀∪9λv~∀4∃%#U∪%
A%≥∪!
LA∪≥∪Q∪β→∪iβ)∪∨8v~∀_BAaYI↑@L↓amYI<v~∀~)!%∨π∃ +%
↓β)→!I(Q∪)∃≠-β$↓.w')I∪≥∞A¬))∪λm%!)$!'(1→→+≥PRAβ)Q
_Rv4∀@@@@@@A ∂β≤4∀@@@@@@A%≥)∂∃$A
→≤v~∀@@@@@A%β≥dA-,v4∀∪!%
%→v4∀@@@@@@AA%∪≥(!)β∧Y¬))∪λ0DzDRl~∀@@@@@@↓!'!π%1?!'Aπ∪0VD`v~∀@@@@@A
→≥>`v~(@@@@@@@(↓xA'βQ∪'
2a'(1→→+≥PQ.YβQ)
_YY,RA <~∀@@@@@@@@@@@@A¬∃∂∪≤~(∩∪∪↓
→∞AQ⊃≤~(∩@@@@@@@@@@@@A!%
%→v4∀@@@@@@@@@@@@Aβ→A%∪≤QY,Rv~(@@@@@@@@@@@@A
→∂|bv~∀@@@@@@@@@@@@↓≥λv4∀@@@@@@A%@
1∞A)⊃∃≤A!%%≥(PDy≥∨≥∀|@DRl~∀@@@@@@↓!'!π%1?!'Aπ∪0ZD`v~∀@@@@@A≥⊂v~∀~)∪≥)I≥β_AA%∨π⊃+%
AAπ ≡QI!)$Q
β→π+1β)∨$$A,w∪Q≠-βHA/→λ$v~∀∪ ∂∪≤4∀~∀∩∧AaeS9ifA←UhAB@ aeKiQrDAm∃egS←8A←LAQQJAOICaPA9←IJ~(∪M←d↓GCYGUYCi←HA,AS8Ao←e1HA/→⊂\v~∀4∀∪%!Q$Q-≥=
RA≥≤v~∀%∂≥?∂∃)
%Qπβ→
+→β)=$u!→9-β→7Y:Y/→⊂Rv~∀%!%π%1v~∀%!%∪≥PPE∪≤↓/∨%→⊂@DY/1λXDX↓πβ→πU→β)∨H@DY→ →∪λQ
β→π+1β)∨$i→¬→7Y:RX~(∩∩∩D↓⊃β&A≥%β!⊂↓!%∨!∃%)∪LtDRv4∀∪!'Aπ∪1?A'!π∪`Vb`v4∀∪!%
%→v4∀∪!%%≥(PEYβ→+
↓≥∨
zDRv4∀∪β→A%∪≤Q≥≤Rf~(∪!'!
∪1?!M!π∪04b`v~(∪!%πI→f~(∪β)→A%(Q/1λXE ∃!&DY
β→π+1β)∨$i !'m-:Rv4∀∪!%
%→v4∀∪≥⊂v~∀~)∪≥)I≥β_AA%∨π⊃+%
AA- ≡QI!)$QYβ%∪β →
RAXw∪)5-β$A]→λRv4∀∪¬≥∪≤4Ph(%¬πβK';'→β?W"β¬↓¬∪↔SSJ⊃β[↔↔≠'?9ε{⊃βSF)β∨K∂β!β;}#∀4(N3?Iβ6K'π⊗c∃αZ
⊃β'9π;?K3"α↑2⊃sX4(4PJJBR∩BZ:>$)%α≡sX4(&∃αRI"≤
2∞Vd
R>IJα
l4PJ
>>d*ε)α4b≥l4Ph(&≡uz≡⊗R5∩⊗
"4
J&ε∀b∃jBdrZε2]2u2↑d!%l4PJBJ∞∀b→l4PJBJ&u!!
&rα↑>Jd!↓ 2M"6:εjB↑2⊃Ja 1↓∩bZεJL
2∃Trε6⊗]2u04PH% αD
Mα≡∀
B!α¬∩>B⊗∃"&⊗MR⊃%l4PJBNB≤Jb}B≥α∞&a[ Al4PJBJ∞∀b→l4PJBJ&u!!
ZbV∃αtz∩∃↓j⊃%l4PJε2B∀J9"≡rIl4(MαNB∞MB}BN∧~&a5↓l4(L
R2B∃!"↑2"a
∩⊗¬→ 2Z
∩&ε
d)jα⊗¬~nZuKX4(&
"2BJ"B↑2⊃b∩∞ε2≥→ 2Z
∩&ε
d)j∞εd~NnZjIl4(L
R2B∃!"↑2"a
∞"r≡⊗J~⊃2Zε∀Jε
2+R∞"εt:⊗JN]2u%lhP&BJ≥∩2→LhP&BN∧~&b}¬~B∞&BYEAlhP$QβbαNεRM~~db≤*Pb~e*⊗:QE:2⊃24
J&ε∀b∃j∞b∞Nn5i2
%∧"<4(HJ
⊗≡Lp4($Mα∞∩=D→2↑2"Il4(HJ~2≡⎇"JV∃Xh($&,r⊃l4PJBNB≤Jb}B≥α∞&ak Al4PJBJ∞∀b→l4PJ⊗*⊃Xh(4*LrR⊗Jt
1αB∀z∞⊗∩-∩∃αB4b∩="∀~⊗2Dλ3\MHYU4
$
td"↔1PPL(XtLpβ"B*y⊂3⊃$λfsU)Iε∀Q(9tQλλIhβ"A⊃0Q1i→@εE∧Bh+"'J!d%i⊃aT!bS&≥!`T-anV∪'aT+⊂i$`a∪"TTV∃f"∀]CE∧DaWabf&∞!b)-Pn]FEαDbg"∞FE∧bS"≥FEβE"g"λ∩∩()⊃db≥FB